/*
 * @本段代码使用: C语言
 * @Created by : SongXiaoxu
 * @Copyright © 2020年 by: 宋晓旭. All rights reserved
 * @Date: 2020-10-26 07:40:16
 * @LastEditTime: 2020-10-26 07:40:26
 */
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct mooncake
{
    float mount, price, unit;
};
int cmp(mooncake a, mooncake b)
{
    return a.unit > b.unit;
}
int main()
{
    int n, need;
    cin >> n >> need;
    vector<mooncake> a(n);
    for (int i = 0; i < n; i++)
        scanf("%f", &a[i].mount);
    for (int i = 0; i < n; i++)
        scanf("%f", &a[i].price);
    for (int i = 0; i < n; i++)
        a[i].unit = a[i].price / a[i].mount;
    sort(a.begin(), a.end(), cmp);
    float result = 0.0;
    for (int i = 0; i < n; i++)
    {
        if (a[i].mount <= need)
        {
            result = result + a[i].price;
        }
        else
        {
            result = result + a[i].unit * need;
            break;
        }
        need = need - a[i].mount;
    }
    printf("%.2f", result);
    return 0;
}